import java.io.IOException;
import java.io.InterruptedIOException;

public class Servidor extends TFTP {
	
	public static int numBloqueServidor = 0;
	static boolean modoVerbose = false;
	static boolean modoTrace = false;
	static boolean hayPerdidaPaquetes = false;
	static int porcentajeErroresPaquete;
	static boolean hayErroresCRC = false;
	static int porcentajeErroresCRC;
	
	public Servidor(boolean soyServidor) {
		super(soyServidor);
	}

	public static void mostrarCabecera() {
		System.out.println("\n\nHubo un problema con los parametros de la aplicacion:");
		System.out.println("FORMA DE USO:  java Servidor [PUERTOSERVIDOR] {-v}");
		System.out.println("EJEMPLO: java Servidor 12345\n\n");
	}
	
	public static void tratarArgumentos(String[] args)
	{
		for(int i=0; i<args.length;i++)
		{
			if(args[i].compareTo("-d") == 0)
			{
				hayPerdidaPaquetes = true;
				porcentajeErroresPaquete = Integer.parseInt(args[i+1]);
			}
			if(args[i].compareTo("-e") == 0)
			{
				hayErroresCRC = true;
				porcentajeErroresCRC = Integer.parseInt(args[i+1]);
			}
			if(args[i].compareTo("-t") == 0)
			{
				modoTrace = true;
			}
			if(args[i].compareTo("-v") == 0)
			{
				modoVerbose = true;
			}	
		}
	}

	public static void main(String[] args) throws IOException, ClassNotFoundException, ArrayIndexOutOfBoundsException {
		try {
			System.out.println("El servidor se esta ejecutando");
			Servidor servidor = new Servidor(true);
			tratarArgumentos(args);
			servidor.ponerParametros(modoVerbose, modoTrace, hayPerdidaPaquetes,
					porcentajeErroresPaquete, hayErroresCRC, porcentajeErroresCRC);
			servidor.setPuertoServidor(args[0]);
			servidor.abrirSocket();
			int tipoPaquete;
			while(true)
			{
				//while(!servidor.transferenciaAcabada)
				//{
				servidor.recibirPaqueteUDP();
				tipoPaquete = servidor.getSiguienteTipoPaquete();
					if(tipoPaquete != 0)
					{
						servidor.prepararPaquete(tipoPaquete);
						servidor.enviarPaqueteUDP();
					//}
				}
			}
			//servidor.cerrarSocket();
		} catch (ArrayIndexOutOfBoundsException e) {
			mostrarCabecera();
		}
	}
}
